function validForm() {
    if (checkRegisterName() == false) {
        alert("账号请输入10位以内的英文字母和数字");
    } else if (checkPwd() == false) {
        alert("密码请输入6-10位的英文字母和数字");
    } else {
        editUser();
    }
}

/*验证登录账号*/
function checkRegisterName() {
    var registerName = $("#account_edit").val();
    var regRegisterName = /^[a-zA-Z0-9]{1,10}$/;
    if (regRegisterName.test(registerName) == false) {
        return false;
    }
    return true;
}

/*验证登录密码*/
function checkPwd() {
    var pwd = $("#password").val();
    var regPwd = /^[a-zA-Z0-9]{6,10}$/;
    if (regPwd.test(pwd) == false) {
        return false;
    }
    return true;
}

var beforeEditAccount;

$(document).ready(function () {
    $("#sessionName").text("你好，" + $("#loginUser").text());
    var updateUid = $("#uid").val();
    console.log(updateUid);
    getProvince();

    $.ajax({
        type: "GET",
        url: "queryUserByUid",
        data: "uid=" + updateUid,
        success: function (data) {
            // 省、市、区
            getCityByProId(data.province);
        },
        error: function () {
            alert("出错啦");
        }
    });

    sleep(100);

    $.ajax({
        type: "GET",
        url: "queryUserByUid",
        data: "uid=" + updateUid,
        success: function (data) {
            // 省、市、区
            $("#province option").each(function () {
                if ($(this).val() == data.province) {
                    $(this).attr("selected", "selected");
                }
            });
            $("#city option").each(function () {
                if ($(this).val() == data.city) {
                    $(this).attr("selected", "selected");
                }
            });
            getDistrictByCityId(data.city);
        },
        error: function () {
            alert("出错啦");
        }
    });

    sleep(100);

    $.ajax({
        type: "GET",
        url: "queryUserByUid",
        data: "uid=" + updateUid,
        success: function (data) {
            $("#account_edit").val(data.account);
            $("#password").val(data.password);
            $("#truename").val(data.truename);
            $("#nickname").val(data.nickname);

            // 省、市、区
            $("#district option").each(function () {
                if ($(this).val() == data.district) {
                    $(this).attr("selected", "selected");
                }
            });

            $("#address_edit").val(data.address);
            $("#postcode").val(data.postcode);
            $("#tel_edit").val(data.tel);

            // 性别
            if (data.sex != null) {
                if (data.sex == "男") {
                    $("#sex1").attr("checked", "checked");
                } else {
                    $("#sex2").attr("checked", "checked");
                }
            }

            // 日期
            if (data.birth != null) {$("#birth").val(data.birth.substr(0, 10));}

            // 头像
            // $("#freeze").val(data[0].freeze);

            beforeEditAccount = $("#account_edit").val();
        },
        error: function () {
            alert("出错啦");
        }
    });
});

function getProvince() {
    $.ajax({
        type: "GET", // 请求方式
        url: "ajaxGetProvince", // 请求的服务器路径
        success: function (data) {
            let strProvince = "";
            $.each(data, function (index, province) {
                strProvince += "<option value='" + province.proId + "'>" + province.proName + "</option>";
            });
            $("#province").html(strProvince);
        },
        error: function () {
            alert("出错啦");
        }
    });
}

function getCityByProId(proId) {
    if (proId == null) proId = "110000";
    $.ajax({
        type: "GET", // 请求方式
        url: "ajaxGetCityByProId", // 请求的服务器路径
        data: "proId=" + proId, // 发送给服务器的数据
        success: function (data) {
            let strCity = "";
            $.each(data, function (index, city) {
                if (index == 0) getDistrictByCityId(city.cityId);
                strCity += "<option value='" + city.cityId + "'>" + city.cityName + "</option>";
            });
            $("#city").html(strCity);
        },
        error: function () {
            alert("出错啦");
        }
    });
}

function getDistrictByCityId(cityId) {
    if (cityId == null) cityId = "110100";
    $.ajax({
        type: "GET", // 请求方式
        url: "ajaxGetDistrictByCityId", // 请求的服务器路径
        data: "cityId=" + cityId, // 发送给服务器的数据
        success: function (data) {
            let strDistrict = "";
            $.each(data, function (index, district) {
                strDistrict += "<option value='" + district.disId + "'>" + district.disName + "</option>";
            });
            $("#district").html(strDistrict);
        },
        error: function () {
            alert("出错啦");
        }
    });
}

//参数n为休眠时间，单位为毫秒:
function sleep(n) {
    var start = new Date().getTime();
    console.log('休眠前：' + start);
    while (true) {
        if (new Date().getTime() - start > n) {
            break;
        }
    }
    console.log('休眠后：' + new Date().getTime());
}

function distribution() {
    let val = $('#saveRA').text();
    if (val == "保存") {
        saveMe();
    } else {
        editMe();
    }
}

// 显示新增的modal模态框
function showAddReceivingAddressModal() {
    $("#gridSystemModalLabel").text("收货地址新增信息管理");
    $('#save').text('保存');
    $("#rid").val("");

    getProvince2();

    getCityByProId2();

    getDistrictByCityId2();

    $('#insertAndUpdateReceivingAddressModal').modal('show');
}

// 点击模态框的保存按钮
function saveMe() {
    // 使用jquery的serialize方法并不能处理包含文件流的表单，这时，需要使用 dom 的 FormData 对象；
    // FormData是dom对象，而不是jquery对象；使用get方法或者 [] 将jquery对象转换为 dom 对象
    // 使用FormData进行文件上传操作，创建一个FormData对象（注意将jquery对象转换为dom对象）
    var formData = new FormData($("#insertForm").get(0));
    // jquery实现ajax的操作
    $.ajax({
        type: "POST", // 请求方式
        url: "ajaxAddReceivingAddress", // 请求的服务器路径
        data: formData, //$("#insertform").serialize(), // post请求的数据参数例如： userId=1&userName=zhangsan

        // 使用FormData对象作为ajax发送服务器的数据载体，需要设置以下两个参数
        contentType: false, // 防止request请求位置文件头上下文对象，如果进行处理，则会丢失文件流对象
        processData: false, // 防止request请求自动处理ForamData对象，如果进行处理，则会丢失文件流对象

        datatype: "Json", // 服务器响应的内容类型
        success: function (data) { // ajax请求成功时的回调函数
            // data 是json对象，而不是json字符串，所有data可以像数据集合一样进行遍历

            // 这里是进行ajax业务逻辑处理的地方
            // 执行ajax引擎的回调处理，这里是用来进行业务逻辑处理的【类似 thread 类的 run 方法； 类似于 servlet的service方法】
            // 体现了dom的局部更新，也是ajax优势
            // 遍历 data json对象
            if (data && data == 'ok') {
                alert("收货地址信息保存成功！");
                // 关闭modal，并调用ajax查询，显示刚才修改的数据记录
                $('#insertAndUpdateReceivingAddressModal').modal('hide');
            } else {
                alert("收货地址信息保存失败！")
            }
        },
        error: function () {
            // ajax请求发生非错误时的回调函数
            alert("收货地址信息保存失败!")
        }
    });
}

function showReceivingAddressModal() {
    var uid = $("#uid").val();

    var defaultAddressId;
    $.ajax({
        type: "get",
        url: "queryUserByUid",
        data: "uid=" + uid,
        success: function (data) {
            console.log(uid);
            console.log(data);
            console.log(data.defaultAddress);
            defaultAddressId = data.defaultAddress;
        },
        error: function () {
            alert("出错啦");
        }
    });

    sleep(100);

    $.ajax({
        type: "get",
        url: "queryAllReceivingAddress",
        data: "uid=" + uid,
        success: function (data) {
            if (data) {
                // 将查询的数据源进行假分页处理
                $("#queryPager").pagination({
                    dataSource: data,
                    pageSize: 3,
                    showGoInput: true,
                    showGoButton: true,
                    callback: function (pageData, pagination) {
                        // template method of yourself
                        var strMsg = "";
                        // 使用each循环遍历，json数组中的每个对象，并将每个对象的属性值取出进行显示
                        $.each(pageData, function (index, eachAddress) {
                            strMsg += "<div class='inner form-horizontal'>";
                            strMsg += "<div class='form-group'>";
                            strMsg += "<label class='col-sm-2 control-label'>所在地</label>";
                            strMsg += "<div class='col-sm-3' style='padding-top: 7px;'>" + eachAddress.provinceName + " " + eachAddress.cityName + " " + eachAddress.districtName + "</div>";

                            console.log("defaultAddressId:"+defaultAddressId);
                            console.log("eachAddress.rid:"+eachAddress.rid);
                            if (defaultAddressId == eachAddress.rid) {
                                strMsg += "<div style='padding-top: 7px;'>默认</div>";
                            }

                            strMsg += "</div>";
                            strMsg += "<div class='form-group'>";
                            strMsg += "<label class='col-sm-2 control-label'>详细地址</label>";
                            strMsg += "<div class='col-sm-3' style='padding-top: 7px;'>" + eachAddress.address + "</div>";
                            strMsg += "</div>";
                            strMsg += "<div class='form-group'>";
                            strMsg += "<label class='col-sm-2 control-label'>联系电话</label>";
                            strMsg += "<div class='col-sm-3' style='padding-top: 7px;'>" + eachAddress.tel + "</div>";
                            strMsg += "</div>";
                            strMsg += "<div class='form-group'>";
                            strMsg += "<button type='button' class='btn btn-default' onclick='selectedDefault(\"" + eachAddress.rid + "\")'>选择</button>";
                            strMsg += "<button type='button' class='btn btn-primary' onclick='showEditReceivingAddressModal(\"" + eachAddress.rid + "\")'>修改</button>";
                            strMsg += "</div>";
                            strMsg += "</div>";
                        });
                        $("#showMsg").html(strMsg); // 局部刷新
                    }
                });
            }
        },
        error: function () {
            alert("出错啦");
        }
    });
    $('#queryReceivingAddressModal').modal('show');
}

function exit() {
    $('#queryReceivingAddressModal').modal('hide');
}

function showEditReceivingAddressModal(rid) {
    $('#queryReceivingAddressModal').modal('hide');
    $("#gridSystemModalLabel").text("收货地址修改信息管理");
    $('#saveRA').text('修改');

    getProvince2();

    $.ajax({
        type: "GET",
        url: "queryAllReceivingAddress",
        data: "rid=" + rid,
        success: function (data) {
            // 省、市、区
            getCityByProId2(data[0].province);
        },
        error: function () {
            alert("出错啦");
        }
    });

    sleep(100);

    $.ajax({
        type: "GET",
        url: "queryAllReceivingAddress",
        data: "rid=" + rid,
        success: function (data) {
            // 省、市、区
            $("#raprovince option").each(function () {
                if ($(this).val() == data[0].province) {
                    $(this).attr("selected", "selected");
                }
            });
            $("#racity option").each(function () {
                if ($(this).val() == data[0].city) {
                    $(this).attr("selected", "selected");
                }
            });
            getDistrictByCityId2(data[0].city);
        },
        error: function () {
            alert("出错啦");
        }
    });

    sleep(100);

    $.ajax({
        type: "GET",
        url: "queryAllReceivingAddress",
        data: "rid=" + rid,
        success: function (data) {
            // 省、市、区
            $("#radistrict option").each(function () {
                if ($(this).val() == data[0].district) {
                    $(this).attr("selected", "selected");
                }
            });

            $("#rid").val(data[0].rid);
            $("#raaddress").val(data[0].address);
            $("#ratel").val(data[0].tel);
        },
        error: function () {
            alert("出错啦");
        }
    });

    $('#insertAndUpdateReceivingAddressModal').modal('show');
}

function editMe() {
    var rid = $("#rid").val();
    var province = $("#raprovince").val();
    var city = $("#racity").val();
    var district = $("#radistrict").val();
    var address = $("#raaddress").val();
    var tel = $("#ratel").val();
	$.ajax({
		type: "PUT",
		url: "ajaxEditReceivingAddress",
		data: "rid="+rid+"&province="+province+"&city="+city+"&district="+district+"&address="+address+"&tel="+tel,
		success: function (data) {
			if (data && data == 'ok') {
				alert("收货地址信息修改成功！");
			} else {
				alert("收货地址信息修改失败！")
			}
		},
		error: function () {
			// ajax请求发生非错误时的回调函数
			alert("收货地址信息修改失败，请刷新后重试!")
		}
	});
    $('#insertAndUpdateReceivingAddressModal').modal('hide');
}

function selectedDefault(rid) {
    var uid = $("#uid").val();

    // console.log()

    $.ajax({
        type: "PUT",
        url: "ajaxUpdateUser",
        data: "uid=" + uid + "&defaultAddress=" + rid,
        success: function (data) {
            if (data && data == 'ok') {
                alert("选择默认地址成功！");
                showReceivingAddressModal();
            } else {
                alert("选择默认地址失败！")
            }
        },
        error: function () {
            // ajax请求发生非错误时的回调函数
            alert("选择默认地址失败!")
        }
    });
}

function getProvince2() {
    $.ajax({
        type: "GET", // 请求方式
        url: "ajaxGetProvince", // 请求的服务器路径
        success: function (data) {
            let strProvince = "";
            $.each(data, function (index, province) {
                strProvince += "<option value='" + province.proId + "'>" + province.proName + "</option>";
            });
            $("#raprovince").html(strProvince);
        },
        error: function () {
            alert("出错啦");
        }
    });
}

function getCityByProId2(proId) {
    if (proId == null) proId = "110000";
    $.ajax({
        type: "GET", // 请求方式
        url: "ajaxGetCityByProId", // 请求的服务器路径
        data: "proId=" + proId, // 发送给服务器的数据
        success: function (data) {
            let strCity = "";
            $.each(data, function (index, city) {
                if (index == 0) getDistrictByCityId2(city.cityId);
                strCity += "<option value='" + city.cityId + "'>" + city.cityName + "</option>";
            });
            $("#racity").html(strCity);
        },
        error: function () {
            alert("出错啦");
        }
    });
}

function getDistrictByCityId2(cityId) {
    console.log("cityId" + cityId);
    if (cityId == null) cityId = "110100";
    $.ajax({
        type: "GET", // 请求方式
        url: "ajaxGetDistrictByCityId", // 请求的服务器路径
        data: "cityId=" + cityId, // 发送给服务器的数据
        success: function (data) {
            let strDistrict = "";
            $.each(data, function (index, district) {
                strDistrict += "<option value='" + district.disId + "'>" + district.disName + "</option>";
            });
            $("#radistrict").html(strDistrict);
        },
        error: function () {
            alert("出错啦");
        }
    });
}

function editUser() {
    var formDataEdit = new FormData($("#updateForm").get(0));
    formDataEdit.append("beforeEditAccount", beforeEditAccount);
    $.ajax({
        type: "PUT", // 请求方式
        url: "ajaxEditUser", // 请求的服务器路径
        data: formDataEdit, //$("#insertform").serialize(), // post请求的数据参数例如： userId=1&userName=zhangsan

        // 使用FormData对象作为ajax发送服务器的数据载体，需要设置以下两个参数
        contentType: false, // 防止request请求位置文件头上下文对象，如果进行处理，则会丢失文件流对象
        processData: false, // 防止request请求自动处理ForamData对象，如果进行处理，则会丢失文件流对象

        datatype: "Json", // 服务器响应的内容类型
        success: function (data) { // ajax请求成功时的回调函数
            // data 是json对象，而不是json字符串，所有data可以像数据集合一样进行遍历

            // 这里是进行ajax业务逻辑处理的地方
            // 执行ajax引擎的回调处理，这里是用来进行业务逻辑处理的【类似 thread 类的 run 方法； 类似于 servlet的service方法】
            // 体现了dom的局部更新，也是ajax优势
            // 遍历 data json对象
            if (data && data == 'AlreadyExists') {
                alert("用户名已存在！");
            } else if (data && data == 'ok') {
                alert("用户信息修改成功！");
            } else {
                alert("用户信息修改失败！")
            }
        },
        error: function () {
            // ajax请求发生非错误时的回调函数
            alert("用户信息修改失败!")
        }
    });
}